#ifndef WRAP_CODE_GENERATOR_OSG_H
#define WRAP_CODE_GENERATOR_OSG_H


#include <DefineLibReflection.h>

#include <DefineCommon.h>
#include <CppInfo.h>
#include <WrapCodeGenerator.h>

//
class WrapCodeGeneratorOsg;
typedef  SmartPtr(WrapCodeGeneratorOsg) WrapCodeGeneratorOsgPtr;
class REFLECTION_DLL WrapCodeGeneratorOsg : public WrapCodeGenerator 
{
public:
    WrapCodeGeneratorOsg();
    ~WrapCodeGeneratorOsg();

    /**Called by function 'classToFile_h', generate the '#include <xxx>'*/
    virtual void genInclude_h(CppInfo::ClassPtr classPtr, EString& content);
    /**Called by function 'classToFile_h', generate class define e.g,
     * 'Class xxx : publice xxxx'
     * 'SmartPtr<xxx>'*/
    virtual void genClassDecl_h(CppInfo::ClassPtr classPtr, EString& content);
    /**Called by function 'classToFile_h', generate orignal ptr variable e.g,:
     * 'osg::ref_ptr<osg::Node> m_origPtr;'*/
    virtual void genClassVariablesOrignalPtr_h(CppInfo::ClassPtr classPtr, EString& content);
    /**Called by function 'classToFile_h', generate orignal ptr get function e.g,:
     * 'virtual intptr_t getOrigPtr()'*/
    virtual void genClassFunGetOrigPtr_h(CppInfo::ClassPtr classPtr, EString& content);
    /**Called by function 'classToFile_h', generate class's constructor function e.g,
     * 'public: xxxx()'*/
    virtual void genClassConstructor_h(CppInfo::ClassPtr classPtr, EString& content);
    /**Called by function 'classToFile_h', generate class's destructor function e.g,
     * 'public: ~xxxx()'*/
    virtual void genClassDestructor_h(CppInfo::ClassPtr classPtr, EString& content);

    /**check if the varType is supportted in UI system, which will affect the result of code generated*/
    virtual bool ifSupportVariableType(const EString& varType);
    /**convert some similar types to one type, example: "const std::string &" will be converted to std::string*/
    virtual EString unifyVariableType(const EString& varType);
};

#endif // WRAP_CODE_GENERATOR_OSG_H
